package com.ruoyi.workflow.service.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.workflow.domain.BpmnNode;
import com.ruoyi.workflow.mapper.BpmnNodeMapper;
import com.ruoyi.workflow.service.IBpmnNodeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.util.List;

/**
 * 流程定义节点Service业务层处理
 *
 * @author xiaohao
 * @date 2022-11-17
 */
@Service
public class BpmnNodeServiceImpl extends ServiceImpl<BpmnNodeMapper, BpmnNode> implements IBpmnNodeService {

    /**
     * 查询流程定义节点列表
     *
     * @param bpmnNode 流程定义节点
     * @return 流程定义节点
     */
    @Override
    public List<BpmnNode> selectBpmnNodeList(BpmnNode bpmnNode) {
        return getBaseMapper().selectBpmnNodeList(bpmnNode);
    }


    //    自定义重写保存方法
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean save(BpmnNode entity) {
        boolean save = super.save(entity);
        if (!CollectionUtils.isEmpty(entity.getAuditor())) {//审核人
            //批量新增审核人员的人员列表
            getBaseMapper().insertRelation(entity.getId(), entity.getAuditor());
        }
        return save;
    }

    //    自定义重写通过 id 更新方法
    @Override
    public boolean updateById(BpmnNode entity) {
//        更新节点
        boolean update = super.updateById(entity);
//        将中间表的所有数据删除
        getBaseMapper().deleteRelation(entity.getId());
//        新增到中间表
        if (!CollectionUtils.isEmpty(entity.getAuditor())) {
            getBaseMapper().insertRelation(entity.getId(), entity.getAuditor());
        }
        return update;
    }

    //     查询所有用户 解决页面下拉回显 以及保存指定用户
    @Override
    public BpmnNode getById(Serializable id) {
        //通过id查到当前用户
        BpmnNode byId = super.getById(id);
        List<Long> auditor = getBaseMapper().selectAuditorByNodeId(id);//基于给定的id查到所有的用户列表
        byId.setAuditor(auditor);
        return byId;
    }


    @Override
    public List<BpmnNode> getByInfoId(Long byInfoId) {
        List<BpmnNode> list = getBaseMapper().getByInfoId(byInfoId);
        return list;
    }

    @Override
    public List<SysUser> selectUserByNodeKey(String nodekey) {
        return getBaseMapper().selectUserByNodeKey(nodekey);
    }

}

